]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st-button: Ignore pointer emulated touch events
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Thu, 25 Oct 2018 04:35:25 +0000 (06:35 +0200)
committerMarco Trevisan <mail@3v1n0.net>
Mon, 26 Nov 2018 21:18:25 +0000 (21:18 +0000)
In X11, pointer emulated touch events are replicated with normal PRESS, RELEASE
pair events which are generated by the server. Thus for a single tap we get:
 - TOUCH_BEGIN -> TOUCH_END, PRESS -> RELEASE

This will cause st-button to send two "clicked" signals, instead of just one,
breaking extensions (like dash-to-dock) that show buttons in the main stage
which will be checked two times or that will receive the same signal two times.

src/st/st-button.c

index 8f5c4922f86f737d86f0e616b87b34531778682c..a3a7b2442e16cc59855df858cf52e0f5398ceb96 100644 (file)
@@ -248,14 +248,17 @@ st_button_touch_event (ClutterActor      *actor,
   if (event->type == CLUTTER_TOUCH_BEGIN && !priv->press_sequence)
     {
       clutter_input_device_sequence_grab (device, sequence, actor);
-      st_button_press (button, device, 0, sequence);
+      if (!clutter_event_is_pointer_emulated ((ClutterEvent*) event))
+        st_button_press (button, device, 0, sequence);
       return CLUTTER_EVENT_STOP;
     }
   else if (event->type == CLUTTER_TOUCH_END &&
            priv->device == device &&
            priv->press_sequence == sequence)
     {
-      st_button_release (button, device, mask, 0, sequence);
+      if (!clutter_event_is_pointer_emulated ((ClutterEvent*) event))
+        st_button_release (button, device, mask, 0, sequence);
+
       clutter_input_device_sequence_ungrab (device, sequence);
       return CLUTTER_EVENT_STOP;
     }